/**

    判别是否需要使用单调栈，如果需要找到左边或者右边第一个比当前位置的数大或者小，则可以考虑使用单调栈；单调栈的题目如矩形米面积等等


     * 维护一个存储下标的单调栈, 从栈底到栈顶的下标对应的温度列表中的温度依次递减
     * 而且栈中元素都是不确定ans的
     *
     * 遍历temperatures[], 如果nums[i]>top, 表示出现了比栈顶元素更大温度,
     * 则记录ans[st.top]即可
     */
    public int[] dailyTemperatures(int[] temperatures) {
        Deque<Integer> st = new LinkedList<>();
        int[] ans = new int[temperatures.length];

        for (int i = 0; i < temperatures.length; i++) {
            if (st.size() == 0 || temperatures[i] <= temperatures[st.getLast()]) {
                st.addLast(i);
            } else {
                while (st.size() > 0 && temperatures[i] > temperatures[st.getLast()]) {
                    int index = st.removeLast();
                    ans[index] = i - index;
                }
                st.addLast(i);
            }
        }
        return ans;
    }